package ucla.axelia.modelo.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import ucla.axelia.modelo.data.DataGenerica;
import ucla.axelia.modelo.data.UsuarioPrograma;

public class ServicioUsuarioProgramaDAO extends ServicioGenericoDAO {

	public ServicioUsuarioProgramaDAO() {
		super(UsuarioPrograma.class);
	}
	
	public List buscarProgramasPorUsuario(String login)  {
		String hql = "Select programa "+
					 "from UsuarioPrograma usuarioPrograma, Programa programa "+
					 "where usuarioPrograma.id.login = :login "+
					 "and programa.idPrograma = usuarioPrograma.id.programa "+
					 "order by programa.nombrePrograma";
		Session session = this.getSession();
		Query query = session.createQuery(hql);
		query.setString("login", login);
		List result = query.list();
		return result;
	}
	
	public UsuarioPrograma buscarPorClave(Serializable clave) {
		// TODO Auto-generated method stub	
		// Buscar por la clave primaria en la tabla
		DataGenerica data = super.buscarPorClave(clave);
		return (data != null)? (UsuarioPrograma)data: null;
	}
	
	public List buscarPorEjemplo(UsuarioPrograma usuarioprograma, String estado) {
		// TODO Auto-generated method stub
		// Buscar todos los datos que se asemejan al objeto (parecido a un LIKE)
		return super.buscarPorEjemplo(usuarioprograma, estado);
	}
	
	public List buscarPorEjemplo(UsuarioPrograma usuarioprograma, String estado, int primero, int cantidad) {
		// TODO Auto-generated method stub
		return super.buscarPorEjemplo(usuarioprograma, estado, primero, cantidad);
	}

	public List buscarPorEjemplo(UsuarioPrograma usuarioprograma, String estado, List orden) {
		// TODO Auto-generated method stub
		return super.buscarPorEjemplo(usuarioprograma, estado, orden);
	}

	public List buscarPorEjemplo(UsuarioPrograma usuarioprograma, String estado, int primero, int cantidad, List orden) {
		// TODO Auto-generated method stub
		return super.buscarPorEjemplo(usuarioprograma, estado, primero, cantidad, orden);
	}

	public void eliminarFisicamente(UsuarioPrograma usuarioprograma) {
		// TODO Auto-generated method stub
		super.eliminarFisicamente(usuarioprograma);
	}

	public void eliminarLogicamente(UsuarioPrograma usuarioprograma, boolean eliminacionCascada) {
		// TODO Auto-generated method stub
		// Hacer en eliminacion en cascada pasando TRUE
		super.eliminarLogicamente(usuarioprograma, eliminacionCascada);
	}

	public void guardar(UsuarioPrograma usuarioprograma) {
		// TODO Auto-generated method stub
		super.guardar(usuarioprograma);
	}

	public void restaurar(UsuarioPrograma UsuarioPrograma, boolean restauracionCascada) {
		// TODO Auto-generated method stub
		// Activar un objeto eliminado logicamente
		super.restaurar(UsuarioPrograma, restauracionCascada);
	}
	
}
